#include "STC8G.h"
#include "User.h"

#define IDL 0x01 //PCON.0 
#define PD 0x02 //PCON.1
#define EX2 0x10
#define EX3 0x20
#define EX4 0x40

// 节能状态定义
enum LD_MODE {
    FLAG_FULL_ON = 0,             // 短按M键状态:10kHz占空比50%
    FLAG_PULSED_ON = 1,             // 短按M键状态:普通模式

} LD_PulsedMode;

// 整机状态量定义
enum DEVMODE {
    DEVMODE_NORMAL = 0,              // 设备正常亮状态
    DEVMODE_NULL,                    // 啥都不亮
    DEVMODE_NOERR,                   // 斜线模式
} DevMode;

// 设备当前状态
enum DEVSTATE {
    DEVSTATE_NULL = 0,
    DEVSTATE_NORMAL,                 // 设备正常工作状态
    DEVSTATE_NOERR,                  // 斜线模式
    DEVSTATE_ERR,                    // 倾斜状态, 爆闪
} DevState;

// 设备当前状态


void SleepIOSet(void) {

    // P0M0 = 0x00; P0M1 = 0xff;
    // P1M0 = 0x00; P1M1 = 0xff;
    // P2M0 = 0x00; P2M1 = 0xff;
    // P3M0 = 0x00; P3M1 = 0xff;



    // 关闭数字输入

    // P1M0 = 0x00; P1M1 = 0xff;
    // P1M0 = 0x00; P1M1 = 0x00;
    // P1IE = 0x00; // 关闭P1口数字输入


    // P2M0 = 0x00; P2M1 = 0xff; 
    // P2M0 = 0x00; P2M1 = 0x00;
    // P2IE = 0x00; // 关闭P2口数字输入


    // P3PU = 0x4c; 
    // P3IE = 0x4c; 



    // //睡眠前开启唤醒中断
    // IT0 = 1; //使能 INT0 下降沿中断
    // EX0 = 1; //使能 INT0 中断

    // IT1 = 1; //使能 INT1 下降沿中断
    // EX1 = 1; //使能 INT1 中断
    // INTCLKO = EX2; //使能 INT2 下降沿中断
    // EA = 1;
}

void WakeupIOSet(void) {
    // 唤醒后恢复数字输入

    P1M0 = 0x07; P1M1 = 0x00; // 设置P1口为推挽输出模式
    P1IE = 0xff; // 使能P1口数字输入

    P2M0 = 0x20;
    P2M1 = 0x40;
    P2IE = 0xFF; // 使能P2口数字输入

    P3PU = 0xec;
    P3IE = 0xff;

}




void McuPDSleep(void)
{
    SleepIOSet(); // 设置IO口为睡眠状态
    PCON = PD;  // MCU进入掉电模式
    _nop_();    // 掉电模式被唤醒后, MCU首先会进入此语句
    _nop_();    //然后再进入中断服务程序
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    // WakeupIOSet(); // 恢复IO口状态
}

/***********************************************************/
/**                工具部分                            *****/
/***********************************************************/

void DelayMs(unsigned int xms)	//@11.0592MHz
{
    unsigned char data i, j;

    _nop_();
    _nop_();
    _nop_();
    i = 11;
    j = 190;
    while (xms--) {
        do {
            while (--j);
        } while (--i);
    }
}
